<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // ES5中方法补充：
        //     索引方法：indexOf()、lastIndexOf()
        //     循环方法：forEach()、map()、filter()、every()、some()
        //     归并方法：reduce()、reduceRight() 缩小方法

        
        var arrs=["aa","bb","cc","dd","aa","bb"];

        // indexOf(x)在数组中查找x首次出现的索引位置
        console.log(arrs.indexOf("aa"));//查找aa在数组中首次出现索引的位置

        // indexOf(x,index)在数组中查找x从index索引位置开始往后查找x首次出现的索引位置
        console.log(arrs.indexOf("aa",3));//从索引为3的开始向后查找aa首次出现的索引位置

        console.log(arrs.lastIndexOf("aa"));//从后往前查找aa首次出现的位置
        console.log(arrs.lastIndexOf("aa",3));//从索引为3的索引开始向前查找aa首次出现的位置
        console.log("------------------");
        // forEach(回调函数)循环变量数组，这个方法没有返回值
        var res=arrs.forEach(function(value,index,array){
            console.log(value);//数组中的元素
            console.log(index);//数组中的索引
            console.log(array);//当前的数组
            
        });
        console.log(res);

        // map(回调函数)返回每次回调函数调用的结构组成的新数据
        var arrs2=[1,2,3,4];
        var res=arrs2.map(function(value,index,array){
            return value*3;
        });
        console.log(res);

        // filter(回调函数)对数组中的元素进行过滤，返回该函数会返回true的项目组成的新数组
        var arrs3=[200,34,8,98,2,7];
        var res=arrs3.filter(function(value,index,array){
            return value>=10;
        });
        console.log(res);
        
        // every(回调函数)用于检测所有元素是否符合指定条，只要有一个不符合，则返回false，如果都符合，则返回true
        var arrs4=[200,34,8,80,2,27];
        var flag=arrs4.every(function(value,index,array){
            return value>=1;
        });
        console.log(flag);
        // some(回调函数)用于检测所有元素是否符合指定条，只要有一个符合，则返回true，如果都不符合，则返回false
        var arrs4=[200,34,8,-80,-90,-27];
        var flag=arrs4.some(function(value,index,array){
            return value>=1;
        });
        console.log(flag);

        // 归并方法：reduce()、reduceRight() 缩小方法
        // reduce(回调函数)、reduceRight(回调函数)会遍历数组中的所有项，然后构造一个最终的返回值
        // 一个从前往后，一个是从后往前
        // callback(prev,cur,index,array)
        // prev:第一次循环prev下标为0的值，后续指的是循环上一次循环的返回值
        // cur:当前循环的元素值
        // index:每次循环的下标
        // array:数组

        // var arrs5=[1,2,3,4];
        // var res=arrs5.reduce(function(prev,cur,index,array){
        //     console.log(prev,cur);
        //     return prev+cur;
        // });
        // console.log(res);
        var arrs5=[1,2,3,4];
        var res=arrs5.reduceRight(function(prev,cur,index,array){
            console.log(prev,cur);
            return prev+cur;
        });
        console.log(res);


    </script>
</head>
<body>
    
</body>
</html>